package kuang.juc.volatiletest;

import java.util.concurrent.TimeUnit;

public class JMMDemo {
    //不加volatile程序就会死循环，线程A一直运行，因为他没有得到最新的主存中num的值

    //volatile保证可见性
    private static volatile int num=0;
    public static void main(String[] args) throws InterruptedException {
        new Thread(()->{
            while (num==0){
                System.out.println(Thread.currentThread().getName()+":"+num);
            }
        },"A").start();

        //   确保线程A已经读到主存中的num后，才开启下面的线程B修改num
        TimeUnit.SECONDS.sleep(2);

        new Thread(()->{
            num=1;
        },"B").start();
        //确保线程B已经修改了num后，主线程再读取num的值
        TimeUnit.SECONDS.sleep(2);

        System.out.println(num);
    }
}
